using GitVersion.Configuration;
using GitVersion.Core.Tests;
using GitVersion.Core.Tests.IntegrationTests;
using GitVersion.VersionCalculation;

namespace GitVersion.Core.Mainline;

internal partial class MainlineScenariosWithAGitHubFlow
{
    [Parallelizable(ParallelScope.All)]
    public class GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsStable
    {
        private EmptyRepositoryFixture? fixture;

        private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New
            .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null)
            .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment))
            .WithBranch("feature", b => b
                .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true)
            );

        [OneTimeSetUp]
        public void OneTimeSetUp()
        {
            // A  58 minutes ago  (HEAD -> feature/foo, main) (tag 0.0.0)

            fixture = new EmptyRepositoryFixture();

            fixture.MakeACommit("A");
            fixture.ApplyTag("0.0.0");
            fixture.BranchTo("feature/foo");
        }

        [OneTimeTearDown]
        public void OneTimeTearDown() => fixture?.Dispose();

        [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]

        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]

        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]

        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]
        public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label)
        {
            IGitVersionConfiguration mainline = MainlineBuilder
                .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null))
                .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label))
                .Build();

            return fixture!.GetVersion(mainline).FullSemVer;
        }

        [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]

        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]

        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]

        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        public string GetVersionWithNoLabelOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature(
        IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label)
        {
            IGitVersionConfiguration mainline = MainlineBuilder
                .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null))
                .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false))
                .Build();

            return fixture!.GetVersion(mainline).FullSemVer;
        }

        [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]

        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]

        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]

        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]
        public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label)
        {
            IGitVersionConfiguration mainline = MainlineBuilder
                .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty))
                .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label))
                .Build();

            return fixture!.GetVersion(mainline).FullSemVer;
        }

        [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]

        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]

        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]

        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        public string GetVersionWithEmptyLabelOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature(
            IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label)
        {
            IGitVersionConfiguration mainline = MainlineBuilder
                .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty))
                .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false))
                .Build();

            return fixture!.GetVersion(mainline).FullSemVer;
        }

        [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]

        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]

        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]

        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]
        public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label)
        {
            IGitVersionConfiguration mainline = MainlineBuilder
                .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo"))
                .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label))
                .Build();

            return fixture!.GetVersion(mainline).FullSemVer;
        }

        [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]

        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]

        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]

        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        public string GetVersionWithLabelFooOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature(
            IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label)
        {
            IGitVersionConfiguration mainline = MainlineBuilder
                .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo"))
                .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false))
                .Build();

            return fixture!.GetVersion(mainline).FullSemVer;
        }

        [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]

        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]

        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]

        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")]
        public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label)
        {
            IGitVersionConfiguration mainline = MainlineBuilder
                .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar"))
                .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label))
                .Build();

            return fixture!.GetVersion(mainline).FullSemVer;
        }

        [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]

        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]

        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]

        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")]
        public string GetVersionWithLabelBarOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature(
            IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label)
        {
            IGitVersionConfiguration mainline = MainlineBuilder
                .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar"))
                .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false))
                .Build();

            return fixture!.GetVersion(mainline).FullSemVer;
        }
    }
}
